﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;

namespace Producer.Producers
{
    public class HelloWorld_mode
    {

        /*
         * 这里是一个消费者，一个创建这模式
         */
        public static void Show()
        {
            var name = "hello";

            var factory=new ConnectionFactory();
            factory.HostName = "127.0.0.1";
            factory.Port = 5672;
            factory.UserName = "aggie";
            factory.Password = "123456";
            factory.VirtualHost = "/myTest";

            // 获取TCP 长连接
            using (var connection = factory.CreateConnection())
            {
                while (true)
                {
                    // 创建通信"通道",相当与TCP中的虚拟链接
                    using (var channel = connection.CreateModel())
                    {
                        /*
                         * 创建队列，声明并创建一个队列，如果队列已存在，则使用这个队列
                         * 第一个参数：队列名称ID
                         * 第二个参数：是否持久化，false对应不持久数据，MQ停掉数据就会丢失
                         * 第三个参数：是否队列私有化，false代表所有消费者可以访问，true代表只有第一次拥有它的消费者才能一直使用
                         * 第四个参数：是否自动删除，false代表连接停掉后不自动删除这个队列
                         * 其他参数为Null
                         */
                        channel.QueueDeclare(name, true, false, false, null);
                        string msg = "你好我是aggie"+DateTime.Now;
                        var body = Encoding.UTF8.GetBytes(msg);
                        /*
                         * exchange:交换机暂时用不到，在进行发布订阅时才会用到
                         * 路由key
                         * 额外设置属性
                         * 最后一个参数要传递的消息字节数组
                         */
                        channel.BasicPublish("", name, null, body);
                        Console.WriteLine($"producer消息：{msg}已发送");
                        
                    }
                    Thread.Sleep(1000);
                }
                Console.Read();
            }
        }

    }
}
